import { IContext, IParam } from '../../common';
import { IAbility } from '../common';
import {
	IRedirectInput,
	IRedirectResult,
	IUIActionResult,
} from './i-ui-action-param';

/**
 * 界面行为服务
 */
export interface IUIService {
	isEnableDEMainState: boolean;

	/**
	 * 执行界面行为
	 * @param tag 界面行为标识
	 * @param context 应用上下文
	 * @param viewParams 视图参数
	 * @param data 业务数据
	 * @param event 事件对象
	 * @param ability 当前环境能力
	 */
	executeUIAction<T extends IAbility>(
		tag: string,
		context: IContext,
		viewParams: IParam,
		data: IParam[],
		event: MouseEvent,
		ability: T
	): Promise<IUIActionResult>;

	/**
	 * 执行界面逻辑
	 * @param tag 界面逻辑标识
	 * @param context 应用上下文
	 * @param viewParams 视图参数
	 * @param data 业务数据
	 * @param event 事件对象
	 * @param ability 当前环境能力
	 */
	executeUILogic<T extends IAbility>(
		tag: string,
		context: IContext,
		viewParams: IParam,
		data: IParam[],
		event: MouseEvent,
		ability: T
	): Promise<IUIActionResult>;

	/**
	 * 获取指定操作标识权限
	 *
	 * @param tag 操作标识tag
	 * @param data 业务数据
	 */
	getOPPrivsAuth(tag: string, data: IParam): number;

	/**
	 * 获取重定向视图
	 * @param context  应用上下文
	 * @param viewParams 视图参数
	 * @param data 当前业务数据
	 * @param redirectParam 重定向视图输入参数
	 */
	getAppRDView(
		context: IContext,
		viewParams: IParam,
		data: IParam,
		redirectParam: IRedirectInput
	): Promise<IRedirectResult>;
}
